package bean;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.apache.log4j.Logger;

import bean.remote.MQRemote;
import dominio.MQ;
import dominio.ModuleType;

@Stateless(name = "mqBean")
@Remote(value = MQRemote.class)
public class MQBean implements MQRemote {

	private final static Logger logger = Logger.getLogger(MQBean.class);

	@PersistenceContext(unitName = "webDS")
	private EntityManager em;

	public MQ findByCodigo(Long codigo) {
		final String sql = "from MQ mq where mq.codigo=:codigo";
		Query q = em.createQuery(sql);
		q.setParameter("codigo", codigo);
		try {
			MQ mq = (MQ) q.getSingleResult();
			logger.info("Se encontro la siguiente cola de mensajeria " + mq);
			return mq;
		} catch (RuntimeException e) {
			logger.error("No se encontro la cola de mensajeria", e);
			return null;
		}
	}

	@Override
	public MQ findByModuleType(ModuleType moduleType) {
		final String sql = "from MQ mq where mq.moduleType=:moduleType";
		Query q = em.createQuery(sql);
		q.setParameter("moduleType", moduleType);
		try {
			MQ mq = (MQ) q.getSingleResult();
			logger.info("Se encontro la siguiente cola de mensajeria " + mq);
			return mq;
		} catch (RuntimeException e) {
			logger.error("No se encontro la cola de mensajeria", e);
			return null;
		}
	}

	@Override
	public MQ crear(MQ mq) {
		em.persist(mq);
		logger.info("Se creo la siguiente cola de mesajeria " + mq);
		return mq;
	}

	@SuppressWarnings("unchecked")
	public List<MQ> findByAll() {
		Query query = em.createQuery("from MQ mq");
		List<MQ> list = (List<MQ>) query.getResultList();
		logger.info("Se encontraron todas colas de mesajeria ");
		return list;
	}

	public MQ findByLogistica() {
		Query q = em.createQuery("from MQ mq where mq.moduleType=:moduleType");
		q.setParameter("moduleType", ModuleType.LOGISTICA);
		try {
			MQ mq = (MQ) q.getSingleResult();
			logger.info("Se encontro la siguiente cola de mensajeria " + mq);
			return mq;
		} catch (RuntimeException e) {
			logger.error("No se encontro la cola de mensajeria", e);
			return null;
		}
	}
}
